home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / macros / latex209 / contrib / newagu / keylist.bst < prev    next >
Text File  |  1993-02-09  |  18KB  |  1,057 lines

  1. %% This is BIBLIST.BST, a special bibliography style file for listing
  2. %% the contents of a BibTeX database file together with the keywords
  3. %% used to identify the entries (ie the argument of the \cite command).
  4. %% It is best used with the BIBLIST.TEX file running under LaTeX
  5. %%
  6. %% Written for BibTeX 0.99
  7. %% (This file was formerly known as KEYLIST.BST; contents not been changed)
  8. %% Date: 1993 January 19
  9. %% Author:       Patrick W. Daly
  10. %%               Max-Planck-Institut f\"ur Aeronomie
  11. %%               W-3411 Katlenburg-Lindau
  12. %%               Germany
  13. %%               E-Mail:     Span-  nsp::linmpi::daly  (nsp=former ecd1)
  14. %%                       Internet-  daly@linmpi.dnet.gwdg.de
  15. %%
  16. %%
  17. ENTRY
  18.   { address
  19.     author
  20.     booktitle
  21.     chapter
  22.     edition
  23.     editor
  24.     howpublished
  25.     institution
  26.     journal
  27.     key
  28.     month
  29.     note
  30.     number
  31.     organization
  32.     pages
  33.     publisher
  34.     school
  35.     series
  36.     title
  37.     type
  38.     volume
  39.     year
  40.   }
  41.   {}
  42.   { label }
  43.  
  44. INTEGERS { output.state before.all mid.sentence after.sentence after.block }
  45.  
  46. FUNCTION {init.state.consts}
  47. { #0 'before.all :=
  48.   #1 'mid.sentence :=
  49.   #2 'after.sentence :=
  50.   #3 'after.block :=
  51. }
  52.  
  53. STRINGS { s t }
  54.  
  55. FUNCTION {output.nonnull}
  56. { 's :=
  57.   output.state mid.sentence =
  58.     { ", " * write$ }
  59.     { output.state after.block =
  60.     { add.period$ write$
  61.       newline$
  62.       "\newblock " write$
  63.     }
  64.     { output.state before.all =
  65.         'write$
  66.         { add.period$ " " * write$ }
  67.       if$
  68.     }
  69.       if$
  70.       mid.sentence 'output.state :=
  71.     }
  72.   if$
  73.   s
  74. }
  75.  
  76. FUNCTION {output}
  77. { duplicate$ empty$
  78.     'pop$
  79.     'output.nonnull
  80.   if$
  81. }
  82.  
  83. FUNCTION {output.check}
  84. { 't :=
  85.   duplicate$ empty$
  86.     { pop$ "empty " t * " in " * cite$ * warning$ }
  87.     'output.nonnull
  88.   if$
  89. }
  90.  
  91. FUNCTION {output.bibitem}
  92. { newline$
  93.   "\bibitem[" write$
  94.   label write$
  95.   "]{" write$
  96.   cite$ write$
  97.   "}" write$
  98.   newline$
  99.   ""
  100.   before.all 'output.state :=
  101. }
  102.  
  103. FUNCTION {fin.entry}
  104. { add.period$
  105.   write$
  106.   newline$
  107. }
  108.  
  109. FUNCTION {new.block}
  110. { output.state before.all =
  111.     'skip$
  112.     { after.block 'output.state := }
  113.   if$
  114. }
  115.  
  116. FUNCTION {new.sentence}
  117. { output.state after.block =
  118.     'skip$
  119.     { output.state before.all =
  120.     'skip$
  121.     { after.sentence 'output.state := }
  122.       if$
  123.     }
  124.   if$
  125. }
  126.  
  127. FUNCTION {not}
  128. {   { #0 }
  129.     { #1 }
  130.   if$
  131. }
  132.  
  133. FUNCTION {and}
  134. {   'skip$
  135.     { pop$ #0 }
  136.   if$
  137. }
  138.  
  139. FUNCTION {or}
  140. {   { pop$ #1 }
  141.     'skip$
  142.   if$
  143. }
  144.  
  145. FUNCTION {new.block.checka}
  146. { empty$
  147.     'skip$
  148.     'new.block
  149.   if$
  150. }
  151.  
  152. FUNCTION {new.block.checkb}
  153. { empty$
  154.   swap$ empty$
  155.   and
  156.     'skip$
  157.     'new.block
  158.   if$
  159. }
  160.  
  161. FUNCTION {new.sentence.checka}
  162. { empty$
  163.     'skip$
  164.     'new.sentence
  165.   if$
  166. }
  167.  
  168. FUNCTION {new.sentence.checkb}
  169. { empty$
  170.   swap$ empty$
  171.   and
  172.     'skip$
  173.     'new.sentence
  174.   if$
  175. }
  176.  
  177. FUNCTION {field.or.null}
  178. { duplicate$ empty$
  179.     { pop$ "" }
  180.     'skip$
  181.   if$
  182. }
  183.  
  184. FUNCTION {emphasize}
  185. { duplicate$ empty$
  186.     { pop$ "" }
  187.     { "{\em " swap$ * "}" * }
  188.   if$
  189. }
  190.  
  191. FUNCTION {bolden}
  192. { duplicate$ empty$
  193.     { pop$ "" }
  194.     { "{\bf " swap$ * "}" * }
  195.   if$
  196. }
  197.  
  198. INTEGERS { nameptr namesleft numnames }
  199.  
  200. FUNCTION {format.names}
  201. { 's :=
  202.   #1 'nameptr :=
  203.   s num.names$ 'numnames :=
  204.   numnames 'namesleft :=
  205.     { namesleft #0 > }
  206.     { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
  207.       nameptr #1 >
  208.     { namesleft #1 >
  209.         { ", " * t * }
  210.         { numnames #2 >
  211.         { "," * }
  212.         'skip$
  213.           if$
  214.           t "others" =
  215.         { " et~al." * }
  216.         { " and " * t * }
  217.           if$
  218.         }
  219.       if$
  220.     }
  221.     't
  222.       if$
  223.       nameptr #1 + 'nameptr :=
  224.       namesleft #1 - 'namesleft :=
  225.     }
  226.   while$
  227. }
  228.  
  229. FUNCTION {format.authors}
  230. { author empty$
  231.     { "" }
  232.     { author format.names }
  233.   if$
  234. }
  235.  
  236. FUNCTION {format.editors}
  237. { editor empty$
  238.     { "" }
  239.     { editor format.names
  240.       editor num.names$ #1 >
  241.     { ", editors" * }
  242.     { ", editor" * }
  243.       if$
  244.     }
  245.   if$
  246. }
  247.  
  248. FUNCTION {format.title}
  249. { title empty$
  250.     { "" }
  251.     { title "t" change.case$ }
  252.   if$
  253. }
  254.  
  255. FUNCTION {n.dashify}
  256. { 't :=
  257.   ""
  258.     { t empty$ not }
  259.     { t #1 #1 substring$ "-" =
  260.     { t #1 #2 substring$ "--" = not
  261.         { "--" *
  262.           t #2 global.max$ substring$ 't :=
  263.         }
  264.         {   { t #1 #1 substring$ "-" = }
  265.         { "-" *
  266.           t #2 global.max$ substring$ 't :=
  267.         }
  268.           while$
  269.         }
  270.       if$
  271.     }
  272.     { t #1 #1 substring$ *
  273.       t #2 global.max$ substring$ 't :=
  274.     }
  275.       if$
  276.     }
  277.   while$
  278. }
  279.  
  280. FUNCTION {format.date}
  281. { year empty$
  282.     { month empty$
  283.     { "" }
  284.     { "there's a month but no year in " cite$ * warning$
  285.       month
  286.     }
  287.       if$
  288.     }
  289.     { month empty$
  290.     'year
  291.     { month " " * year * }
  292.       if$
  293.     }
  294.   if$
  295. }
  296.  
  297. FUNCTION {format.btitle}
  298. { title emphasize
  299. }
  300.  
  301. FUNCTION {tie.or.space.connect}
  302. { duplicate$ text.length$ #3 <
  303.     { "~" }
  304.     { " " }
  305.   if$
  306.   swap$ * *
  307. }
  308.  
  309. FUNCTION {either.or.check}
  310. { empty$
  311.     'pop$
  312.     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  313.   if$
  314. }
  315.  
  316. FUNCTION {format.bvolume}
  317. { volume empty$
  318.     { "" }
  319.     { "volume" volume bolden tie.or.space.connect
  320.       series empty$
  321.     'skip$
  322.     { " of " * series emphasize * }
  323.       if$
  324.       "volume and number" number either.or.check
  325.     }
  326.   if$
  327. }
  328.  
  329. FUNCTION {format.number.series}
  330. { volume empty$
  331.     { number empty$
  332.     { series field.or.null }
  333.     { output.state mid.sentence =
  334.         { "number" }
  335.         { "Number" }
  336.       if$
  337.       number tie.or.space.connect
  338.       series empty$
  339.         { "there's a number but no series in " cite$ * warning$ }
  340.         { " in " * series * }
  341.       if$
  342.     }
  343.       if$
  344.     }
  345.     { "" }
  346.   if$
  347. }
  348.  
  349. FUNCTION {format.edition}
  350. { edition empty$
  351.     { "" }
  352.     { output.state mid.sentence =
  353.     { edition "l" change.case$ " edition" * }
  354.     { edition "t" change.case$ " edition" * }
  355.       if$
  356.     }
  357.   if$
  358. }
  359.  
  360. INTEGERS { multiresult }
  361.  
  362. FUNCTION {multi.page.check}
  363. { 't :=
  364.   #0 'multiresult :=
  365.     { multiresult not
  366.       t empty$ not
  367.       and
  368.     }
  369.     { t #1 #1 substring$
  370.       duplicate$ "-" =
  371.       swap$ duplicate$ "," =
  372.       swap$ "+" =
  373.       or or
  374.     { #1 'multiresult := }
  375.     { t #2 global.max$ substring$ 't := }
  376.       if$
  377.     }
  378.   while$
  379.   multiresult
  380. }
  381.  
  382. FUNCTION {format.pages}
  383. { pages empty$
  384.     { "" }
  385.     { pages multi.page.check
  386.     { "pages" pages n.dashify tie.or.space.connect }
  387.     { "page" pages tie.or.space.connect }
  388.       if$
  389.     }
  390.   if$
  391. }
  392.  
  393. FUNCTION {format.vol.num.pages}
  394. { volume field.or.null bolden
  395.   number empty$
  396.     'skip$
  397.     { ", (" number * ")" * *
  398.       volume empty$
  399.     { "there's a number but no volume in " cite$ * warning$ }
  400.     'skip$
  401.       if$
  402.     }
  403.   if$
  404.   pages empty$
  405.     'skip$
  406.     { duplicate$ empty$
  407.     { pop$ format.pages }
  408.     { ", " * pages n.dashify * }
  409.       if$
  410.     }
  411.   if$
  412. }
  413.  
  414. FUNCTION {format.chapter.pages}
  415. { chapter empty$
  416.     'format.pages
  417.     { type empty$
  418.     { "chapter" }
  419.     { type "l" change.case$ }
  420.       if$
  421.       chapter tie.or.space.connect
  422.       pages empty$
  423.     'skip$
  424.     { ", " * format.pages * }
  425.       if$
  426.     }
  427.   if$
  428. }
  429.  
  430. FUNCTION {format.in.ed.booktitle}
  431. { booktitle empty$
  432.     { "" }
  433.     { editor empty$
  434.     { "In " booktitle emphasize * }
  435.     { "In " format.editors * ", " * booktitle emphasize * }
  436.       if$
  437.     }
  438.   if$
  439. }
  440.  
  441. FUNCTION {empty.misc.check}
  442. { author empty$ title empty$ howpublished empty$
  443.   month empty$ year empty$ note empty$
  444.   and and and and and
  445.   key empty$ not and
  446.     { "all relevant fields are empty in " cite$ * warning$ }
  447.     'skip$
  448.   if$
  449. }
  450.  
  451. FUNCTION {format.thesis.type}
  452. { type empty$
  453.     'skip$
  454.     { pop$
  455.       type "t" change.case$
  456.     }
  457.   if$
  458. }
  459.  
  460. FUNCTION {format.tr.number}
  461. { type empty$
  462.     { "Technical Report" }
  463.     'type
  464.   if$
  465.   number empty$
  466.     { "t" change.case$ }
  467.     { number tie.or.space.connect }
  468.   if$
  469. }
  470.  
  471. FUNCTION {format.article.crossref}
  472. { key empty$
  473.     { journal empty$
  474.     { "need key or journal for " cite$ * " to crossref " * crossref *
  475.       warning$
  476.       ""
  477.     }
  478.     { "In {\em " journal * "\/}" * }
  479.       if$
  480.     }
  481.     { "In " key * }
  482.   if$
  483.   " \cite{" * crossref * "}" *
  484. }
  485.  
  486. FUNCTION {format.crossref.editor}
  487. { editor #1 "{vv~}{ll}" format.name$
  488.   editor num.names$ duplicate$
  489.   #2 >
  490.     { pop$ " et~al." * }
  491.     { #2 <
  492.     'skip$
  493.     { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  494.         { " et~al." * }
  495.         { " and " * editor #2 "{vv~}{ll}" format.name$ * }
  496.       if$
  497.     }
  498.       if$
  499.     }
  500.   if$
  501. }
  502.  
  503. FUNCTION {format.book.crossref}
  504. { volume empty$
  505.     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
  506.       "In "
  507.     }
  508.     { "Volume" volume bolden tie.or.space.connect
  509.       " of " *
  510.     }
  511.   if$
  512.   editor empty$
  513.   editor field.or.null author field.or.null =
  514.   or
  515.     { key empty$
  516.     { series empty$
  517.         { "need editor, key, or series for " cite$ * " to crossref " *
  518.           crossref * warning$
  519.           "" *
  520.         }
  521.         { "{\em " * series * "\/}" * }
  522.       if$
  523.     }
  524.     { key * }
  525.       if$
  526.     }
  527.     { format.crossref.editor * }
  528.   if$
  529.   " \cite{" * crossref * "}" *
  530. }
  531.  
  532. FUNCTION {format.incoll.inproc.crossref}
  533. { editor empty$
  534.   editor field.or.null author field.or.null =
  535.   or
  536.     { key empty$
  537.     { booktitle empty$
  538.         { "need editor, key, or booktitle for " cite$ * " to crossref " *
  539.           crossref * warning$
  540.           ""
  541.         }
  542.         { "In {\em " booktitle * "\/}" * }
  543.       if$
  544.     }
  545.     { "In " key * }
  546.       if$
  547.     }
  548.     { "In " format.crossref.editor * }
  549.   if$
  550.   " \cite{" * crossref * "}" *
  551. }
  552.  
  553. FUNCTION {article}
  554. { output.bibitem
  555.   format.authors "author" output.check
  556.   new.block
  557.   format.title "title" output.check
  558.   new.block
  559.   crossref missing$
  560.     { journal emphasize "journal" output.check
  561.       format.vol.num.pages output
  562.       format.date "year" output.check
  563.     }
  564.     { format.article.crossref output.nonnull
  565.       format.pages output
  566.     }
  567.   if$
  568.   new.block
  569.   note output
  570.   fin.entry
  571. }
  572.  
  573. FUNCTION {book}
  574. { output.bibitem
  575.   author empty$
  576.     { format.editors "author and editor" output.check }
  577.     { format.authors output.nonnull
  578.       crossref missing$
  579.     { "author and editor" editor either.or.check }
  580.     'skip$
  581.       if$
  582.     }
  583.   if$
  584.   new.block
  585.   format.btitle "title" output.check
  586.   crossref missing$
  587.     { format.bvolume output
  588.       new.block
  589.       format.number.series output
  590.       new.sentence
  591.       publisher "publisher" output.check
  592.       address output
  593.     }
  594.     { new.block
  595.       format.book.crossref output.nonnull
  596.     }
  597.   if$
  598.   format.edition output
  599.   format.date "year" output.check
  600.   new.block
  601.   note output
  602.   fin.entry
  603. }
  604.  
  605. FUNCTION {booklet}
  606. { output.bibitem
  607.   format.authors output
  608.   new.block
  609.   format.title "title" output.check
  610.   howpublished address new.block.checkb
  611.   howpublished output
  612.   address output
  613.   format.date output
  614.   new.block
  615.   note output
  616.   fin.entry
  617. }
  618.  
  619. FUNCTION {inbook}
  620. { output.bibitem
  621.   author empty$
  622.     { format.editors "author and editor" output.check }
  623.     { format.authors output.nonnull
  624.       crossref missing$
  625.     { "author and editor" editor either.or.check }
  626.     'skip$
  627.       if$
  628.     }
  629.   if$
  630.   new.block
  631.   format.btitle "title" output.check
  632.   crossref missing$
  633.     { format.bvolume output
  634.       format.chapter.pages "chapter and pages" output.check
  635.       new.block
  636.       format.number.series output
  637.       new.sentence
  638.       publisher "publisher" output.check
  639.       address output
  640.     }
  641.     { format.chapter.pages "chapter and pages" output.check
  642.       new.block
  643.       format.book.crossref output.nonnull
  644.     }
  645.   if$
  646.   format.edition output
  647.   format.date "year" output.check
  648.   new.block
  649.   note output
  650.   fin.entry
  651. }
  652.  
  653. FUNCTION {incollection}
  654. { output.bibitem
  655.   format.authors "author" output.check
  656.   new.block
  657.   format.title "title" output.check
  658.   new.block
  659.   crossref missing$
  660.     { format.in.ed.booktitle "booktitle" output.check
  661.       format.bvolume output
  662.       format.number.series output
  663.       format.chapter.pages output
  664.       new.sentence
  665.       publisher "publisher" output.check
  666.       address output
  667.       format.edition output
  668.       format.date "year" output.check
  669.     }
  670.     { format.incoll.inproc.crossref output.nonnull
  671.       format.chapter.pages output
  672.     }
  673.   if$
  674.   new.block
  675.   note output
  676.   fin.entry
  677. }
  678.  
  679. FUNCTION {inproceedings}
  680. { output.bibitem
  681.   format.authors "author" output.check
  682.   new.block
  683.   format.title "title" output.check
  684.   new.block
  685.   crossref missing$
  686.     { format.in.ed.booktitle "booktitle" output.check
  687.       format.bvolume output
  688.       format.number.series output
  689.       format.pages output
  690.       address empty$
  691.     { organization publisher new.sentence.checkb
  692.       organization output
  693.       publisher output
  694.       format.date "year" output.check
  695.     }
  696.     { organization output
  697.       publisher output
  698.       address output.nonnull
  699.       format.date "year" output.check
  700.     }
  701.       if$
  702.     }
  703.     { format.incoll.inproc.crossref output.nonnull
  704.       format.pages output
  705.     }
  706.   if$
  707.   new.block
  708.   note output
  709.   fin.entry
  710. }
  711.  
  712. FUNCTION {conference} { inproceedings }
  713.  
  714. FUNCTION {manual}
  715. { output.bibitem
  716.   author empty$
  717.     { organization empty$
  718.     'skip$
  719.     { organization output.nonnull
  720.       address output
  721.     }
  722.       if$
  723.     }
  724.     { format.authors output.nonnull }
  725.   if$
  726.   new.block
  727.   format.btitle "title" output.check
  728.   author empty$
  729.     { organization empty$
  730.     { address new.block.checka
  731.       address output
  732.     }
  733.     'skip$
  734.       if$
  735.     }
  736.     { organization address new.block.checkb
  737.       organization output
  738.       address output
  739.     }
  740.   if$
  741.   format.edition output
  742.   format.date output
  743.   new.block
  744.   note output
  745.   fin.entry
  746. }
  747.  
  748. FUNCTION {mastersthesis}
  749. { output.bibitem
  750.   format.authors "author" output.check
  751.   new.block
  752.   format.title "title" output.check
  753.   new.block
  754.   "Master's thesis" format.thesis.type output.nonnull
  755.   school "school" output.check
  756.   address output
  757.   format.date "year" output.check
  758.   new.block
  759.   note output
  760.   fin.entry
  761. }
  762.  
  763. FUNCTION {misc}
  764. { output.bibitem
  765.   format.authors output
  766.   title howpublished new.block.checkb
  767.   format.title output
  768.   howpublished new.block.checka
  769.   howpublished output
  770.   format.date output
  771.   new.block
  772.   note output
  773.   fin.entry
  774.   empty.misc.check
  775. }
  776.  
  777. FUNCTION {phdthesis}
  778. { output.bibitem
  779.   format.authors "author" output.check
  780.   new.block
  781.   format.btitle "title" output.check
  782.   new.block
  783.   "PhD thesis" format.thesis.type output.nonnull
  784.   school "school" output.check
  785.   address output
  786.   format.date "year" output.check
  787.   new.block
  788.   note output
  789.   fin.entry
  790. }
  791.  
  792. FUNCTION {proceedings}
  793. { output.bibitem
  794.   editor empty$
  795.     { organization output }
  796.     { format.editors output.nonnull }
  797.   if$
  798.   new.block
  799.   format.btitle "title" output.check
  800.   format.bvolume output
  801.   format.number.series output
  802.   address empty$
  803.     { editor empty$
  804.     { publisher new.sentence.checka }
  805.     { organization publisher new.sentence.checkb
  806.       organization output
  807.     }
  808.       if$
  809.       publisher output
  810.       format.date "year" output.check
  811.     }
  812.     { editor empty$
  813.     'skip$
  814.     { organization output }
  815.       if$
  816.       publisher output
  817.       address output.nonnull
  818.       format.date "year" output.check
  819.     }
  820.   if$
  821.   new.block
  822.   note output
  823.   fin.entry
  824. }
  825.  
  826. FUNCTION {techreport}
  827. { output.bibitem
  828.   format.authors "author" output.check
  829.   new.block
  830.   format.title "title" output.check
  831.   new.block
  832.   format.tr.number output.nonnull
  833.   institution "institution" output.check
  834.   address output
  835.   format.date "year" output.check
  836.   new.block
  837.   note output
  838.   fin.entry
  839. }
  840.  
  841. FUNCTION {unpublished}
  842. { output.bibitem
  843.   format.authors "author" output.check
  844.   new.block
  845.   format.title "title" output.check
  846.   new.block
  847.   note "note" output.check
  848.   format.date output
  849.   fin.entry
  850. }
  851.  
  852. FUNCTION {default.type} { misc }
  853.  
  854. MACRO {jan} {"January"}
  855.  
  856. MACRO {feb} {"February"}
  857.  
  858. MACRO {mar} {"March"}
  859.  
  860. MACRO {apr} {"April"}
  861.  
  862. MACRO {may} {"May"}
  863.  
  864. MACRO {jun} {"June"}
  865.  
  866. MACRO {jul} {"July"}
  867.  
  868. MACRO {aug} {"August"}
  869.  
  870. MACRO {sep} {"September"}
  871.  
  872. MACRO {oct} {"October"}
  873.  
  874. MACRO {nov} {"November"}
  875.  
  876. MACRO {dec} {"December"}
  877.  
  878. MACRO {grl} {"Geophys. Res. Lett."}
  879.  
  880. MACRO {jgr} {"J. Geophys. Res."}
  881.  
  882. MACRO {aa} {"Astron. Astrophys."}
  883.  
  884. MACRO {pass} {"Planet. Space Sci."}
  885.  
  886. MACRO {adv} {"Adv. Space Res."}
  887.  
  888. MACRO {ann} {"Annales Geophys."}
  889.  
  890. READ
  891.  
  892. FUNCTION {sortify}
  893. { purify$
  894.   "l" change.case$
  895. }
  896.  
  897. INTEGERS { len }
  898.  
  899. FUNCTION {chop.word}
  900. { 's :=
  901.   'len :=
  902.   s #1 len substring$ =
  903.     { s len #1 + global.max$ substring$ }
  904.     's
  905.   if$
  906. }
  907.  
  908. FUNCTION {sort.format.names}
  909. { 's :=
  910.   #1 'nameptr :=
  911.   ""
  912.   s num.names$ 'numnames :=
  913.   numnames 'namesleft :=
  914.     { namesleft #0 > }
  915.     { nameptr #1 >
  916.     { "   " * }
  917.     'skip$
  918.       if$
  919.       s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
  920.       nameptr numnames = t "others" = and
  921.     { "et al" * }
  922.     { t sortify * }
  923.       if$
  924.       nameptr #1 + 'nameptr :=
  925.       namesleft #1 - 'namesleft :=
  926.     }
  927.   while$
  928. }
  929.  
  930. FUNCTION {sort.format.title}
  931. { 't :=
  932.   "A " #2
  933.     "An " #3
  934.       "The " #4 t chop.word
  935.     chop.word
  936.   chop.word
  937.   sortify
  938.   #1 global.max$ substring$
  939. }
  940.  
  941. FUNCTION {author.sort}
  942. { author empty$
  943.     { key empty$
  944.     { "to sort, need author or key in " cite$ * warning$
  945.       ""
  946.     }
  947.     { key sortify }
  948.       if$
  949.     }
  950.     { author sort.format.names }
  951.   if$
  952. }
  953.  
  954. FUNCTION {author.editor.sort}
  955. { author empty$
  956.     { editor empty$
  957.     { key empty$
  958.         { "to sort, need author, editor, or key in " cite$ * warning$
  959.           ""
  960.         }
  961.         { key sortify }
  962.       if$
  963.     }
  964.     { editor sort.format.names }
  965.       if$
  966.     }
  967.     { author sort.format.names }
  968.   if$
  969. }
  970.  
  971. FUNCTION {author.organization.sort}
  972. { author empty$
  973.     { organization empty$
  974.     { key empty$
  975.         { "to sort, need author, organization, or key in " cite$ * warning$
  976.           ""
  977.         }
  978.         { key sortify }
  979.       if$
  980.     }
  981.     { "The " #4 organization chop.word sortify }
  982.       if$
  983.     }
  984.     { author sort.format.names }
  985.   if$
  986. }
  987.  
  988. FUNCTION {editor.organization.sort}
  989. { editor empty$
  990.     { organization empty$
  991.     { key empty$
  992.         { "to sort, need editor, organization, or key in " cite$ * warning$
  993.           ""
  994.         }
  995.         { key sortify }
  996.       if$
  997.     }
  998.     { "The " #4 organization chop.word sortify }
  999.       if$
  1000.     }
  1001.     { editor sort.format.names }
  1002.   if$
  1003. }
  1004.  
  1005. FUNCTION {presort}
  1006. {
  1007.   cite$ 'label :=
  1008.   cite$ 'sort.key$ :=
  1009. }
  1010.  
  1011. ITERATE {presort}
  1012.  
  1013. SORT
  1014.  
  1015. STRINGS { longest.label }
  1016.  
  1017. INTEGERS { number.label longest.label.width }
  1018.  
  1019. FUNCTION {initialize.longest.label}
  1020. { "" 'longest.label :=
  1021.   #0 'longest.label.width :=
  1022. }
  1023.  
  1024. FUNCTION {longest.label.pass}
  1025. { label width$ longest.label.width >
  1026.     { label 'longest.label :=
  1027.       label width$ 'longest.label.width :=
  1028.     }
  1029.     'skip$
  1030.   if$
  1031. }
  1032.  
  1033. EXECUTE {initialize.longest.label}
  1034.  
  1035. ITERATE {longest.label.pass}
  1036.  
  1037. FUNCTION {begin.bib}
  1038. { preamble$ empty$
  1039.     'skip$
  1040.     { preamble$ write$ newline$ }
  1041.   if$
  1042.   "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
  1043. }
  1044.  
  1045. EXECUTE {begin.bib}
  1046.  
  1047. EXECUTE {init.state.consts}
  1048.  
  1049. ITERATE {call.type$}
  1050.  
  1051. FUNCTION {end.bib}
  1052. { newline$
  1053.   "\end{thebibliography}" write$ newline$
  1054. }
  1055.  
  1056. EXECUTE {end.bib}
  1057.